package shm.capaDatos.entidades;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;

import shm.capaDatos.vo.PermisoVO;
import shm.capaDatos.vo.ProyectoVO;
import shm.capaDatos.vo.TipoPermisoVO;
import shm.capaDatos.vo.UsuarioVO;
import shm.util.Utilidad;
@Entity
public class Permiso implements Serializable {
	@Id
	@GeneratedValue(strategy=GenerationType.IDENTITY)
	private Integer id;
	@ManyToOne
	@JoinColumn(name="usuario_id", nullable = false)
	private Usuario usuario;
	@ManyToOne
	@JoinColumn(name="tipoPermiso_id", nullable = false)
	private TipoPermiso tipoPermiso;
	@ManyToOne
	@JoinColumn(name="proyecto_id", nullable = false)
	private Proyecto proyecto;
	private static final long serialVersionUID = 1L;	
	
	public void setId(Integer id) {
		this.id = id;
	}
	public void setTipoPermiso(TipoPermiso tipoPermiso) {
		this.tipoPermiso = tipoPermiso;
	}
	public void setProyecto(Proyecto proyecto) {
		this.proyecto = proyecto;
	}
	public Integer getId() {
		return id;
	}
	public TipoPermiso getTipoPermiso() {
		return tipoPermiso;
	}
	public Proyecto getProyecto() {
		return proyecto;
	}
	
	public Usuario getUsuario() {
		return usuario;
	}
	public void setUsuario(Usuario usuario) {
		this.usuario = usuario;
	}
	public PermisoVO getVO(){
		UsuarioVO usuarioVO = null;
		if(this.usuario!=null){
			usuarioVO = this.usuario.getVOBasico();
		}
		TipoPermisoVO tipoPermisoVO = null;
		if(this.tipoPermiso != null){
			tipoPermisoVO = this.tipoPermiso.getVO();
		}
		ProyectoVO proyectoVO = null;
		if(this.proyecto != null){
			proyectoVO = this.proyecto.getVO();
		}
		
		PermisoVO permisoVO = new PermisoVO(this.id, usuarioVO,tipoPermisoVO,proyectoVO);
		return permisoVO;
	}
	public void setVO(PermisoVO permisoVO){
		if(permisoVO != null){
			this.id = permisoVO.getId();
			UsuarioVO usuarioVO = permisoVO.getUsuario();
			if(usuarioVO != null){
				if(this.usuario == null){
					this.usuario = new Usuario();
				}
				this.usuario.setVOBasico(usuarioVO);
			}else{
				this.usuario = null;
			}
			TipoPermisoVO tipoPermisoVO = permisoVO.getTipoPermiso();
			if(tipoPermisoVO != null){
				if(this.tipoPermiso == null){
					this.tipoPermiso = new TipoPermiso();
				}
				this.tipoPermiso.setVO(tipoPermisoVO);
			}else{
				this.tipoPermiso = null;
			}
			ProyectoVO proyectoVO = permisoVO.getProyecto();
			if(proyectoVO != null){
				if(this.proyecto == null){
					this.proyecto = new Proyecto();
				}
				this.proyecto.setVO(proyectoVO);
			}else{
				this.proyecto = null;
			}
		}
	}
	public boolean equals(Object o){
		if(o.getClass() !=Permiso.class){
			return false;
		}
		Permiso permiso = (Permiso) o;
		if(Utilidad.iguales(this.id, permiso.getId())){
			if(Utilidad.iguales(this.tipoPermiso, permiso.getTipoPermiso())){
				if(Utilidad.iguales(this.usuario, permiso.getUsuario())){
					return Utilidad.iguales(this.proyecto, permiso.getProyecto());	
				}else{
					return false;
				}
			}else{
				return false;
			}
		}else{
			return false;
		}
	}

	
}
